// 简单的全局音频播放器（单实例）
let audioInstance = null;

/**
 * 传入 mp3 路径自动开始播放
 * @param {string} src 音频文件地址（mp3）
 * @param {{ loop?: boolean, volume?: number }} [options]
 * @returns {Promise<void>} 返回一个 Promise，表示播放是否成功开始
 */
export function playMp3(src, options = {}) {
  const { loop = false, volume = 1 } = options;

  if (!src || typeof src !== 'string') {
    return Promise.reject(new Error('playMp3: 无效的音频地址'));
  }

  try {
    // 复用全局实例，避免并发创建多个 <audio>
    if (!audioInstance) {
      audioInstance = new Audio();
      // 提升移动端内联播放兼容性，特别是 Safari
      audioInstance.setAttribute('playsinline', 'true');
      audioInstance.setAttribute('webkit-playsinline', 'true');
      audioInstance.setAttribute('preload', 'auto');
      // 移除 controls 以避免 Safari 的某些限制
      audioInstance.setAttribute('controls', 'false');
    }

    // 停止上一段播放
    try {
      audioInstance.pause();
    } catch (e) {
      console.error('停止上一段音频失败', e);
    }

    audioInstance.src = src;
    audioInstance.loop = !!loop;
    audioInstance.volume = Math.max(0, Math.min(1, Number(volume)));
    audioInstance.currentTime = 0;

    // Safari 兼容：需要先 load() 再 play()
    audioInstance.load();

    // 尝试自动播放（注意：浏览器策略可能阻止带声音的自动播放）
    const playPromise = audioInstance.play();
    if (playPromise && typeof playPromise.then === 'function') {
      return playPromise.catch(err => {
        // Safari 可能会拒绝自动播放，但这不应该导致整个流程失败
        console.warn('音频自动播放被阻止（可能需要用户交互）', err);
        return Promise.resolve();
      });
    }
    return Promise.resolve();
  } catch (err) {
    console.error('播放音频失败', err);
    return Promise.reject(err);
  }
}

/**
 * 停止播放并复位到开头
 */
export function stopMp3() {
  if (audioInstance) {
    try {
      audioInstance.pause();
      audioInstance.currentTime = 0;
    } catch (e) {
      console.error('停止播放音频失败', e)
    }
  }
}

/**
 * 获取底层 Audio 实例
 */
export function getAudioInstance() {
  return audioInstance;
}
